package com.crm.dao.mapper.customMapper.contactManagerCustomMapper;

import com.crm.model.entity.contactManager.Contact;
import com.crm.model.entity.contactManager.ContactExchangeCode;
import com.crm.model.entity.contactManager.ContactInformation;
import com.crm.model.entity.customerManager.Customer;
import com.crm.model.qo.contactManager.AddContactInformationQO;
import com.crm.model.qo.contactManager.ContactFollowPlanTimeQO;
import com.crm.model.qo.contactManager.ContactQO;
import com.crm.model.vo.contactManager.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 联系人管理
 */
public interface ContactCustomMapper {

    /**
     * 联系人管理信息
     * @param contactQO
     * @param sortOrder
     * @return
     */
    //List<ContactVO> selectContactList(@Param("contactQO")ContactQO contactQO,@Param("sortOrder")String sortOrder);

    /**
     * 联系人管理信息--管理员
     *
     * @param contactQO
     * @param sortOrder
     * @return
     */
    List<ContactVO> selectContactGlyList(@Param("contactQO") ContactQO contactQO, @Param("dateUnit") Integer dateUnit, @Param("sortOrder") String sortOrder);

    /**
     * 联系人管理信息--分公司
     *
     * @param contactQO
     * @param sortOrder
     * @return
     */
    List<ContactVO> selectContactFgsList(@Param("contactQO") ContactQO contactQO, @Param("dateUnit") Integer dateUnit, @Param("sortOrder") String sortOrder);

    /**
     * 联系人管理信息--普通用户
     *
     * @param contactQO
     * @param sortOrder
     * @return
     */
    List<ContactVO> selectContactPtyhList(@Param("contactQO") ContactQO contactQO, @Param("dateUnit") Integer dateUnit, @Param("sortOrder") String sortOrder);

    /**
     * 根据联系人id查询联系人详情
     *
     * @param contactId
     * @return
     */
    ContactVO selectContactDetailById(@Param("contactId") String contactId);

    /**
     * 联系人-新增联系人--同一客户下联系人重名-->合并联系方式
     *
     * @param addContactInformationQO customerId 客户id
     * @param addContactInformationQO contactName 联系人姓名
     * @param addContactInformationQO account 登录人
     * @return
     */
    List<AddContactVO> getContactName(@Param("addContactInformationQO") AddContactInformationQO addContactInformationQO);

    /**
     * 商机-新增商机-通过客户id查询联系人列表
     *
     * @param addContactInformationQO customerId 客户id
     * @return
     */
    List<AddContactVO> contactByCustomerIdList(@Param("addContactInformationQO") AddContactInformationQO addContactInformationQO);

    /**
     * 查询联系人里面有的行业
     *
     * @param name   登录人
     * @param number 0超管 1普通管理员  2普通用户
     * @return
     */
    List<IndustryAreaVO> selectIndustry(@Param("name") String name, @Param("number") Integer number);

    /**
     * 查询联系人里面有的地图
     *
     * @param name   登录人
     * @param number 0超管 1普通管理员  2普通用户
     * @return
     */
    List<IndustryAreaVO> selectProvince(String name, Integer number);

    /**
     * 根据客户ID更新联系人所有人ID、分公司ID
     *
     * @param customerId     -客户ID
     * @param accountId      -用户ID
     * @param companyId      -公司ID
     * @param updatePeopleId -更新人ID
     * @param updateTm       -更新时间
     * @return {@link {int}}
     * @Author pym
     * @Date 2021/4/8 15:47
     */
    int updateContactByCustomerId(@Param("customerId") String customerId, @Param("accountId") String accountId,
                                  @Param("companyId") String companyId, @Param("updatePeopleId") String updatePeopleId,
                                  @Param("updateTm") Date updateTm);

    /**
     * 根据客户id修改联系人所属人
     *
     * @param customerList    被选中客户List
     * @param toUserAccountId 指定用户主键ID
     * @param updateAccountId 更新者
     * @return
     * @Author renshaorong
     * @Date 2021/4/9
     */
    int moveContactByCustomerIds(List<Customer> customerList, String toUserAccountId, String updateAccountId);


    /**
     * @Description: 按天统计时间段内新增联系人
     * @Param: [startTime, endTime]
     * @Return: java.util.List<com.crm.model.vo.contactManager.ContactStatisticsVO>
     * @Author: lixq-f
     * @Date: 2021/4/16
     **/
    List<ContactStatisticsVO> statisticsNewContactByDay(@Param("startTime") String startTime,
                                                        @Param("endTime") String endTime,
                                                        @Param("accountId") String accountId);


    /**
     * @Description: 按月统计本年度新增联系人
     * @Param: [startTime, endTime]
     * @Return: java.util.List<com.crm.model.vo.contactManager.ContactStatisticsVO>
     * @Author: lixq-f
     * @Date: 2021/4/16
     **/
    List<ContactStatisticsVO> statisticsNewContactByMonth(@Param("thisYear") int thisYear,
                                                          @Param("accountId") String accountId);

    /**
     * 根据客户id、姓名、手机号查询有没有这个联系人
     * @param customerId
     * @param contactPerson
     * @param contactPersonPhone
     * @return
     */
    ContactVO isInsertContactPerson(@Param("customerId") String customerId,
                                  @Param("contactPerson") String contactPerson,
                                  @Param("contactPersonPhone") String contactPersonPhone);

    /**
     * 根据公司id和联系人性质 企业联系人
     * @param companyId 客户id
     * @return
     */
    List<ContactRepeatVO> selectContactrepeat(@Param("companyId") String companyId);

    /**
     * 通过联系人id修改联系方式表的删除状态
     * @param contactInformation 联系方式实体类
     * @return
     */
    int updateInformation(@Param("contactInformation") ContactInformation contactInformation);

    /**
     * 兑换码列表
     * @param contactId 联系人id
     * @param sortOrder 分组
     * @return
     */
    List<ContactExchangeCodeVO> selectContactExchangeCodeList(@Param("contactId") String contactId,@Param("sortOrder") String sortOrder);

    /**
     * 查询联系人里面有的标签
     * @param name
     * @param number 0 超管 1普管 2普通
     * @return
     */
    List<String> selectTag(@Param("name") String name,@Param("number")  Integer number);

    /**
     * 新增跟进计划时间
     * @param qo
     * @return
     */
    Boolean addContactFollowPlanTimes(@Param("qo") ContactFollowPlanTimeQO qo);

    /**
     * 查询客户下的其他联系人
     * @param customerId   客户Id
     * @return
     */
    List<Contact> selectOtherContactByCustomerId(@Param("customerId") String customerId,@Param("contactId") String contactId,@Param("accountId") String accountId,@Param("companyId") String companyId);

    /**
     * 修改跟进计划时间
     */
    List<Contact> selectLessDayFollowPlanTime(@Param("date") String date);

    /**
     * 跟进计划时间清空
     * @param contact
     * @return
     */
    Boolean updateContactFollowPlanTime(@Param("contact") Contact contact);
}
